home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1993-10-09 | 6.9 KB | 143 lines |
- DEFINITION MODULE cstr;
- __DEF_SWITCHES__
- #ifdef HM2
- #ifdef __LONG_WHOLE__
- (*$!i+: Modul muss mit $i- uebersetzt werden! *)
- (*$!w+: Modul muss mit $w- uebersetzt werden! *)
- #else
- (*$!i-: Modul muss mit $i+ uebersetzt werden! *)
- (*$!w-: Modul muss mit $w+ uebersetzt werden! *)
- #endif
- #endif
- (*****************************************************************************)
- (* Diese Prozeduren dienen der Bearbeitung von Strings nach 'C'-Konvention, *)
- (* d.h. sie sind IMMER (einzige Ausnahme: "strncpy()") mit einem Nullbyte *)
- (* abgeschlossen und werden durch einen Zeiger auf ihren ersten Buchstaben *)
- (* repraesentiert. Die Prozeduren fangen Zeiger mit dem Wert NULL (nicht NIL)*)
- (* ab. *)
- (* "strerror()" arbeitet mit einem M2-String, da kein Bedarf besteht, den *)
- (* Fehlertext als 'C'-String zu verarbeiten. *)
- (* Laengenangaben werden zwar durch den Typ 'sizeT' repraesentiert, es *)
- (* duerfen aber nur Werte im Bereich 'StrRange' benutzt werden. *)
- (* --------------------------------------------------------------------------*)
- (* 18-Sep-93, Holger Kleinschmidt *)
- (*****************************************************************************)
-
- FROM types IMPORT
- (* TYPE *) sizeT, StrPtr, StrRange;
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- PROCEDURE strlen ((* EIN/ -- *) str : StrPtr ): sizeT;
-
- (*---------------------------------------------------------------------------
- | Liefert die Laenge von <str>. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE strcpy ((* EIN/ -- *) dst : StrPtr;
- (* EIN/ -- *) src : StrPtr );
-
- PROCEDURE strncpy ((* EIN/ -- *) dst : StrPtr;
- (* EIN/ -- *) src : StrPtr;
- (* EIN/ -- *) len : sizeT );
-
- (*---------------------------------------------------------------------------
- | Zuweisung: dst := src. |
- | "strncpy()" kopiert im Gegensatz zu "strcpy()" genau <len> Zeichen |
- | nach <dst>^. Falls <src>^ kuerzer als <len> ist, wird <dst>^ mit Nullbytes|
- | auf <len> Zeichen aufgefuellt, falls jedoch <src>^ groesser oder gleich |
- | als <len> Zeichen ist, wird <dst>^ NICHT mit einem Nullbyte abgeschlossen!|
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE strcat ((* EIN/ -- *) dst : StrPtr;
- (* EIN/ -- *) src : StrPtr );
-
- PROCEDURE strncat ((* EIN/ -- *) dst : StrPtr;
- (* EIN/ -- *) src : StrPtr;
- (* EIN/ -- *) len : sizeT );
-
- (*---------------------------------------------------------------------------
- | Konkatenation: dst := dst ++ src. |
- | "strncat()" kopiert hoechstens <len> Zeichen von <src> ans Ende von <dst>,|
- | <src> wird aber auf jeden Fall mit einem Nullbyte abgeschlossen. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE strcmp ((* EIN/ -- *) str1 : StrPtr;
- (* EIN/ -- *) str2 : StrPtr ): INTEGER;
-
- PROCEDURE strncmp ((* EIN/ -- *) str1 : StrPtr;
- (* EIN/ -- *) str2 : StrPtr;
- (* EIN/ -- *) len : sizeT ): INTEGER;
-
- (*---------------------------------------------------------------------------
- | Vergleichen <str1> und <str2> zeichenweise miteinander. Wenn beide Strings|
- | gleich sind, wird Null geliefert; ist ein Zeichen aus <str1> kleiner als |
- | das entsprechende Zeichen in <str2> wird ein Wert kleiner Null geliefert; |
- | ist ein Zeichen groesser, wird ein Wert groesser Null geliefert. |
- | "strncmp()" vergleicht hoechstens <len> Zeichen miteinander. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE strchr ((* EIN/ -- *) s : StrPtr;
- (* EIN/ -- *) c : CHAR ): StrPtr;
-
- PROCEDURE strrchr ((* EIN/ -- *) s : StrPtr;
- (* EIN/ -- *) c : CHAR ): StrPtr;
-
- (*---------------------------------------------------------------------------
- | Suchen das erste bzw. letzte Auftreten von <c> in <s>. Falls <c> gefunden |
- | wird, wird ein Zeiger auf die Adresse in <s> geliefert, sonst NULL. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE strstr ((* EIN/ -- *) str : StrPtr;
- (* EIN/ -- *) pat : StrPtr ): StrPtr;
-
- (*---------------------------------------------------------------------------
- | Liefert die Adresse des ersten Auftretens von <pat> in <str>, sonst NULL. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE strpbrk ((* EIN/ -- *) str : StrPtr;
- (* EIN/ -- *) brk : StrPtr ): StrPtr;
-
- (*---------------------------------------------------------------------------
- | Liefert die Adresse des ersten Auftretens eines Zeichens aus <brk> in <s>,|
- | sonst NULL. |
- ---------------------------------------------------------------------------*)
-
-
- PROCEDURE strerror ((* EIN/ -- *) errnum : INTEGER;
- (* -- /AUS *) VAR errstr : ARRAY OF CHAR );
-
- (*--------------------------------------------------------------------------
- | Wandelt den Fehlercode <errnum> in einen kurzen Fehlertext <errstr>. |
- --------------------------------------------------------------------------*)
-
-
-
- PROCEDURE AssignM2ToC ((* EIN/ -- *) REF strM2 : ARRAY OF CHAR;
- (* EIN/ -- *) sizeC : StrRange;
- (* EIN/ -- *) strC : StrPtr );
-
- PROCEDURE AssignCToM2 ((* EIN/ -- *) strC : StrPtr;
- (* -- /AUS *) VAR strM2 : ARRAY OF CHAR );
-
- (*---------------------------------------------------------------------------
- | "AssignM2ToC()" und "AssignCToM2()" wandeln die MODULA- und C-Stringre- |
- | praesentationen ineinander um. Falls <strM2> bei "AssignCToM2()" nicht |
- | gross genug ist, wird entsprechend gekuerzt. |
- | <strC> muss bei "AssignM2ToC" auf einen Speicherbereich ausreichender |
- | Laenge zeigen. Es werden maximal <size> Zeichen kopiert. <size> bezeichnet|
- | den Platz in <strC>^. Falls <strM2> groesser oder gleich <sizeC> Zeichen |
- | ist, werden genau <sizeC> Zeichen nach <strC> kopiert, aber NICHT mit |
- | einem Nullbyte abgeschlossen. Nur wenn <strM2> kuerzer als <sizeC> Zeichen|
- | ist, wird <strC> mit einem Nullbyte abgeschlossen. Diese Prozedur ent- |
- | spricht damit "strncpy()". |
- ---------------------------------------------------------------------------*)
-
- END cstr.
-